ABC146 C - Buy an Integer
提出
TLE
code: python
a, b, x = list(map(int, input().split()))
ans = 0
for i in range(x):
buy = a * i + b * len(str(i))
if (buy <= x and buy > ans):
ans = i
print(ans)
解答
code: python
a, b, x = map(int, input().split())
l = 0
r = 10**9+1
while l < r-1:
m = (l+r) // 2
res = a * m + b * len(str(m))
if res > x:
r = m
else:
l = m
print(l)
テーマ
メモ
l = r-1になったら終了だからprint(r-1)でも通る
提出
code: python
a, b, x = map(int, input().split())
# A*N + B*d(N) <- 短調増加
# 1 <= N <= 10^9
# 計算量オーバー ループせずに列挙できるか
# 全列挙出来るならbinary_searchするまでもない
# res = []
# for n in range(1, 10**9):
# res.append(a * n + b * len(str(n)))
提出
code: py
a, b, x = map(int, input().split())
def price(n):
return a*n + b*len(str(n))
# 単調増加だが、2分探索のための列挙はできない
print(price(9))